#ifndef BIGINTEGER_H
#define BIGINTEGER_H
#define MAX 10000

#include <iostream>

namespace NahidaProject {
	class __declspec(dllexport) BigInteger{
	private:
		std::string number;
		bool sign;

	private:
		bool Equals(BigInteger n1, BigInteger n2);
		bool Less(BigInteger n1, BigInteger n2);
		bool Greater(BigInteger n1, BigInteger n2);
		std::string Add(std::string number1, std::string number2);
		std::string Subtract(std::string number1, std::string number2);
		std::string Multiply(std::string n1, std::string n2);
		std::pair<std::string, long long> Divide(std::string n, long long den);
		std::string ToString(long long n);
		long long ToInt(std::string s);

	public:
		BigInteger();
		BigInteger(std::string s);
		BigInteger(std::string s, bool sin);
		BigInteger(int n);
		void SetNumber(std::string s);
		const std::string& GetNumber();
		void SetSign(bool s);
		const bool& GetSign();
		BigInteger Absolute();
		void operator = (BigInteger b);
		bool operator == (BigInteger b);
		bool operator != (BigInteger b);
		bool operator > (BigInteger b);
		bool operator < (BigInteger b);
		bool operator >= (BigInteger b);
		bool operator <= (BigInteger b);
		BigInteger& operator ++();
		BigInteger  operator ++(int);
		BigInteger& operator --();
		BigInteger  operator --(int);
		BigInteger operator + (BigInteger b);
		BigInteger operator - (BigInteger b);
		BigInteger operator * (BigInteger b);
		BigInteger operator / (BigInteger b);
		BigInteger operator % (BigInteger b);
		BigInteger& operator += (BigInteger b);
		BigInteger& operator -= (BigInteger b);
		BigInteger& operator *= (BigInteger b);
		BigInteger& operator /= (BigInteger b);
		BigInteger& operator %= (BigInteger b);
		BigInteger& operator [] (int n);
		BigInteger operator -();
		operator std::string();
		
	};
}

#endif